<?php
/**
 * 服务器端response辅助类
 *
 * @version $Id: IResponse.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.core
 */
class IResponse extends IObject {	    
    /**
    * 普通的跳转
    * 
    * 不会中止程序的运行
    * 
    * @param string $url 要跳转到的地址
    */
    private static function redirect($url) {
    	$file = null;
    	$line = null;
    	if (isset($_SERVER["SERVER_SOFTWARE"]) && preg_match("/IIS/", $_SERVER["SERVER_SOFTWARE"]) || headers_sent($file, $line)) {
    		echo "<script language=\"javascript\">window.location=\"" . str_replace("\"", "%22", $url) . "\";</script>";	
    		return;
    	}
   		header("location:" . $url);	
    }

	/**
	* 跳转到其它页面,并终止程序的执行
	* 
	* 将会导致程序的终止
	* 
	* @param string $url 要转向的地址或路径
	*/
    public static function sendRedirect($url) {
        IResponse::redirect($url);
        exit();
    }

	/**
	* 返回本页,以执行不同的动作
	* 
	* @param string $query 查询条件
	* @param integer $refresh 是否刷新,默认为true(刷新)，如设置为true，则会自动加入新的参数，强行刷新该页的缓存
	*/
    public static function selfRedirect($query = "", $refresh = true) {
        $url = IServer::getRequestPage();
        if ($refresh) {
            $query = "PHPSESSID=" . md5(microtime()) . "&" .$query;
            $query = rtrim($query, "&");
        }
        if ($query != "") {
            if (!preg_match("/\\?/", $url)) {
                $url .= "?" . $query;
            }
            else {
                $url .= "&" . $query;
            }
        }
        IResponse::redirect($url);
        exit();
    }

	/**
	* js的跳转,并终止程序的执行
	* 
	* @param string $alert 提示语,默认为空
	* @param string $expression 执行的js语句,默认为"history.back()"(返回)
	*/
    public static function jsRedirect($alert = "", $expression = "history.back()") {
        if ($alert != "") {
        	$alert = IRequest::addslash($alert);
            $alert = str_replace("\n", "\\n", $alert);
            echo "<script language=\"javascript\">";
            echo "alert(\"{$alert}\");";
            echo "</script>";
        }
        if ($expression != "") {
            echo "<script language=\"javascript\">\n";
            echo $expression . "\n";
            echo "</script>";
        }
        exit();
    }
    
    /**
     * 加入新的cookie
     * 
     * 如果cookie已经存在，则会执行覆盖
     *
     * @param ICookie $cookie ICookie对象
     * @return boolean
     */
    public static function addCookie(ICookie $cookie) {
    	$maxAge = $cookie->getMaxAge();
    	if ($maxAge > 0) {
    		$maxAge += time();
    	}
    	return setcookie($cookie->getName(), $cookie->getValue(), $maxAge, $cookie->getPath(), $cookie->getDomain(), $cookie->getSecure());
    }
}


?>